﻿// 蛇身类型
const SnakeBodyType = {
    APPLE: 0,   // 果子
    SNAKE: 1,   // 蛇
}

/**
 * 蛇身类的构造方法。
 * @param drawer    绘图者
 * @param point     位置
 * @param type      类型
 */
function SnakeBody(drawer, point, type) {
    var mColor = null       // 颜色
    const mDrawer = drawer  // 绘图者
    var mNext = null        // 下一个蛇身
    var mPosition = point   // 位置

    /**
     * 画自身。
     */
    this.draw = function() {
        mDrawer.fillStyle = mColor
        mDrawer.beginPath()
        mDrawer.arc(mPosition.x * Const.GRID_SIZE + Const.GRID_SIZE / 2,
            mPosition.y * Const.GRID_SIZE + Const.GRID_SIZE / 2, Const.GRID_SIZE / 2, 0, Math.PI * 2)
        mDrawer.closePath()
        mDrawer.fill()
    }

    /**
     * 将蛇身从原来的位置中抹除。
     */
    this.erase = function() {
        mDrawer.fillStyle = Const.GAME_BOARD_COLOR
        mDrawer.fillRect(mPosition.x * Const.GRID_SIZE,
            mPosition.y * Const.GRID_SIZE, Const.GRID_SIZE, Const.GRID_SIZE)
    }

    /**
     * 获取下一个蛇身。
     * @return 下一个蛇身
     */
    this.getNext = function() {
        return mNext
    }
    
    /**
     * 获取位置。
     * @return 位置
     */
    this.getPosition = function() {
        return mPosition
    }

    /**
     * 设置下一个蛇身。
     * @param snakeBody 下一个蛇身
     */
    this.setNext = function(snakeBody) {
        mNext = snakeBody
    }
    
    /**
     * 设置位置。
     * @param position  位置
     */
    this.setPosition = function(position) {
        mPosition.x = position.x
        mPosition.y = position.y
    }

    /**
     * 设置蛇身的类型。
     * @param type  类型
     */
    this.setType = function(type) {
        if (type == SnakeBodyType.SNAKE) {
            mColor = Const.SNAKE_COLOR
        } else {
            mColor = Const.APPLE_COLOR
        }
    }

    // 设置类型
    this.setType(type)

    // 画自身
    this.draw()
}
